package br.com.algarmidia.services;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br.com.algarmidia.models.User;
import br.com.algarmidia.repositories.UserRepository;

//Esta anotação informa ao servidor de aplicação que a classe é uma classe de serviço do Spring
@Service
public class UserServiceImpl implements UserService {

	//A injeção de componentes no Spring é feita com a anotação @Autowired na propriedade desejada.
	//Se a classe que se deseja injetar não pode ser anotada, deve ser criado um bean no arquivo de configuração do Spring para isso
	@Autowired
	private UserRepository userRepository;

	//@Override mostra ao programador que este método está implementando um método da sua superclasse ou interface
	@Override
	//@Transactional mostra ao servidor de aplicação que a tarefa realizada neste método deve ser feita em uma só transação.
	//Esta foi a razão para a criação de uma classe de serviço para a entidade User. Buscar e deletar o usuário sem perder a sessão.
	@Transactional(propagation=Propagation.REQUIRED)
	public void destroy(User user) {
		userRepository.destroy(userRepository.find(user.getId()));
	}

}
